#include "pch.hpp"
#include "Win32Key.hpp"




Win32Key::Win32Key(uint8 virtualKey)
	: m_virtualKey(virtualKey)
	, m_pressed(false)
	, m_clicked(false)
	, m_down(false)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




uint8 Win32Key::virtualKey() const
{
	return m_virtualKey;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




bool Win32Key::pressed() const
{
	return m_pressed;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

bool Win32Key::clicked() const
{
	return m_clicked;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

bool Win32Key::down() const
{
	return m_down;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Win32Key::setPressed(bool b)
{
	m_pressed = b;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Win32Key::setClicked(bool b)
{
	m_clicked = b;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Win32Key::setDown(bool b)
{
	m_down = b;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




Key::Type Win32Key::fromVirtualKey(uint32 virtualKey)
{
	switch(virtualKey)
	{
	case 0x30: return _0;
	case 0x31: return _1;
	case 0x32: return _2;
	case 0x33: return _3;
	case 0x34: return _4;
	case 0x35: return _5;
	case 0x36: return _6;
	case 0x37: return _7;
	case 0x38: return _8;
	case 0x39: return _9;

	case 0x41: return A;
	case 0x42: return B;
	case 0x43: return C;
	case 0x44: return D;
	case 0x45: return E;
	case 0x46: return F;
	case 0x47: return G;
	case 0x48: return H;
	case 0x49: return I;
	case 0x4A: return J;
	case 0x4B: return K;
	case 0x4C: return L;
	case 0x4D: return M;
	case 0x4E: return N;
	case 0x4F: return O;
	case 0x50: return P;
	case 0x51: return Q;
	case 0x52: return R;
	case 0x53: return S;
	case 0x54: return T;
	case 0x55: return U;
	case 0x56: return V;
	case 0x57: return W;
	case 0x58: return Y;
	case 0x59: return X;
	case 0x5A: return Z;

	case VK_F1: return F1;
	case VK_F2: return F2;
	case VK_F3: return F3;
	case VK_F4: return F4;
	case VK_F5: return F5;
	case VK_F6: return F6;
	case VK_F7: return F7;
	case VK_F8: return F8;
	case VK_F9: return F9;
	case VK_F10: return F10;
	case VK_F11: return F11;
	case VK_F12: return F12;

	case VK_SPACE:    return Space;
	case VK_LCONTROL: return LControl;
	case VK_RCONTROL: return RControl;
	case VK_LSHIFT:   return LShift;
	case VK_RSHIFT:   return RShift;
	case VK_LMENU:    return Alt;
	case VK_RMENU:    return AltGr;
	case VK_CAPITAL:  return Caps;
	case VK_TAB:      return Tab;
	case VK_RETURN:   return Enter;
	case VK_BACK:     return Backspace;
	case VK_DELETE:   return Delete;
	case VK_ESCAPE:   return Esc;
	case VK_PAUSE:    return Pause;
	case VK_PRINT:    return Print;
	case VK_HOME:     return Pos1;
	case VK_END:      return End;
	case VK_NEXT:     return PageUp;
	case VK_PRIOR:    return PageDown;
	case VK_LEFT:     return Left;
	case VK_UP:       return Up;
	case VK_RIGHT:    return Right;
	case VK_DOWN:     return Down;

	case VK_LBUTTON:  return MouseLeft;
	case VK_MBUTTON:  return MouseMiddle;
	case VK_RBUTTON:  return MouseRight;
	case VK_XBUTTON1: return MouseX1;
	case VK_XBUTTON2: return MouseX2;
	default:          return Unknown;
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
